package com.atguigu.structures.tree.avl;

import com.atguigu.structures.tree.node.AVLNode;

/**
 * 平衡二叉树测试类
 *
 * @author xr-8
 * @date 2022-12-29
 * @time 20:09
 */
public class AVLTreeTest {

    public static void main(String[] args) {
//        int[] arr = leftRotateTest(); // {4,3,6,5,7,8} 左旋转
//        int[] arr = rightRotateTest(); // {10, 12, 8, 9, 7, 6} 右旋转
        int[] arr = doubleRotateTest(); // {10, 11, 7, 6, 8, 9} 双旋转
        //创建一个 AVLTree对象
        AVLTree avlTree = new AVLTree();
        //添加结点
        for(int i=0; i < arr.length; i++) {
            avlTree.add(new AVLNode(arr[i]));
        }
        //遍历
        System.out.println("中序遍历");
        avlTree.infixOrder();

        System.out.println("在平衡处理~~");
        System.out.println("树的高度=" + avlTree.getRoot().height()); //3
        System.out.println("树的左子树高度=" + avlTree.getRoot().leftHeight()); // 2
        System.out.println("树的右子树高度=" + avlTree.getRoot().rightHeight()); // 2
        System.out.println("当前的根结点=" + avlTree.getRoot());//8
    }

    /**
     * 测试左旋
     */
    public static int[] leftRotateTest(){
       return new int[]{4,3,6,5,7,8}; // 左旋转
    }

    /**
     * 测试右旋
     */
    public static int[] rightRotateTest(){
        return new int[]{10, 12, 8, 9, 7, 6}; // 右旋转
    }

    /**
     * 测试双旋
     */
    public static int[] doubleRotateTest(){
        return new int[]{ 10, 11, 7, 6, 8, 9 }; // 双旋转
    }
}
